From 992d33cb42a6e70d98a65f55fb9d000de0fd613b Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Fri, 8 Nov 2024 10:07:32 +0100 Subject: [PATCH] ubus: add notifications on wireless device state changes Provide notifications similar to interface state changes Signed-off-by: Felix Fietkau --- ubus.c | 10 ++++++++++ ubus.h | 2 ++ wireless.c | 2 ++ 3 files changed, 14 insertions(+) diff --git a/ubus.c b/ubus.c index e46b83d..3c3a7dc 100644 --- a/ubus.c +++ b/ubus.c @@ -1416,6 +1416,16 @@ netifd_ubus_interface_notify(struct interface *iface, bool up) ubus_notify(ubus_ctx, &iface->ubus, event, b.head, -1); } +void +netifd_ubus_wireless_notify(struct wireless_device *wdev, bool up) +{ + const char *event = (up) ? "wireless.update" : "wireless.down"; + + blob_buf_init(&b, 0); + wireless_device_status(wdev, &b); + ubus_notify(ubus_ctx, &wireless_object, event, b.head, -1); +} + void netifd_ubus_add_interface(struct interface *iface) { diff --git a/ubus.h b/ubus.h index b9b4b69..89534a7 100644 --- a/ubus.h +++ b/ubus.h @@ -14,6 +14,7 @@ #ifndef __NETIFD_UBUS_H #define __NETIFD_UBUS_H +struct wireless_device; typedef void (*procd_data_cb)(struct blob_attr *data); extern struct ubus_context *ubus_ctx; @@ -29,5 +30,6 @@ void netifd_ubus_interface_event(struct interface *iface, bool up); void netifd_ubus_interface_notify(struct interface *iface, bool up); void netifd_ubus_device_notify(const char *event, struct blob_attr *data, int timeout); void netifd_ubus_get_procd_data(const char *type, procd_data_cb cb); +void netifd_ubus_wireless_notify(struct wireless_device *wdev, bool up); #endif diff --git a/wireless.c b/wireless.c index c8b8945..c05bf7d 100644 --- a/wireless.c +++ b/wireless.c @@ -602,6 +602,7 @@ wireless_device_mark_down(struct wireless_device *wdev) wdev->state = IFS_DOWN; wireless_device_free_state(wdev); wdev_handle_config_change(wdev); + netifd_ubus_wireless_notify(wdev, false); } /* timeout callback to protect the tear down */ @@ -671,6 +672,7 @@ wireless_device_mark_up(struct wireless_device *wdev) vlist_for_each_element(&vif->vlans, vlan, node) wireless_vlan_handle_link(vlan, true); } + netifd_ubus_wireless_notify(wdev, true); } static void -- 2.30.2